<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
    {
        // let wait = function (type) {
        //     let deferred = $.Deferred();

        //     setTimeout(() => {
        //         if (type) {
        //             deferred.resolve({
        //                 success: true,
        //                 data: 1
        //             })
        //         } else {
        //             deferred.reject({
        //                 success: false,
        //                 data: 0
        //             })
        //         }

        //     }, 1000)
        //     return deferred.promise()
        // }

        ////第一种写法
        // wait(true)
        //     .pipe((res) => {
        //         console.log(res)
        //         //在done前处理数据,只有在成功的情况下才能使用
        //         res.data="这是pipe处理完了返回"
        //         return res
        //     })
        //     .done((res) => {
        //         console.log("成功")
        //         console.log(res)

        //     })
        //     .fail((res) => {
        //         console.log("失败")
        //         console.log(res)

        //     })
        //     .always(function (res) {
        //         console.log("成功失败都返回",res);
        //     })

        ////第二种写法 $.when(fun1,fun2) 两个都是Deferred 并且都  resolve 才done

        ////第三种写法

    }



    {
        let wait2 = function (deferred, type = true) {

            setTimeout(() => {
                if (type) {
                    deferred.resolve({
                        success: true,
                        data: 1
                    })
                } else {
                    deferred.reject({
                        success: false,
                        data: 0
                    })
                }

            }, 1000)
            return deferred.promise()
        }
        $.Deferred(wait2) ///Query规定，$.Deferred()可以接收一个函数名作为参数，所生成的deferred对象将作为这个函数的默认参数
            .pipe((res) => {
                console.log(res)
                //在done前处理数据,只有在成功的情况下才能使用
                res.data = "这是pipe处理完了返回"
                return res
            })
            .done((res) => {
                console.log("成功")
                console.log(res)

            })
            .fail((res) => {
                console.log("失败")
                console.log(res)

            })
            .always(function (res) {
                console.log("成功失败都返回", res);
            })
    }
</script>

</html>